#ifndef __HC_SR04_CONFIG_H
#define __HC_SR04_CONFIG_H

/* 包含文件 ----------------------------------------------------------------*/
#include "stm32f10x.h"              // STM32标准外设库（必需）
#include "Delay.h"                  // 精确延时函数（提供Delay_us()和Delay_ms()）
#include "OLED_SSD1315_Config.h"    // OLED显示屏驱动（用于显示距离数据）

/* 硬件引脚定义 ------------------------------------------------------------*/
// Trig引脚定义（触发信号输出引脚）
#define HC_SR04_TRIG_CLK      RCC_APB2Periph_GPIOB  // Trig引脚时钟（APB2总线）
#define HC_SR04_TRIG_PORT     GPIOB                 // Trig端口（GPIOB）
#define HC_SR04_TRIG_PIN      GPIO_Pin_8            // Trig引脚编号（PB8）

// Echo引脚定义（回波信号输入引脚）
#define HC_SR04_ECHO_CLK      RCC_APB2Periph_GPIOB  // Echo引脚时钟（APB2总线）
#define HC_SR04_ECHO_PORT     GPIOB                 // Echo端口（GPIOB）
#define HC_SR04_ECHO_PIN      GPIO_Pin_9            // Echo引脚编号（PB9）

// Echo引脚状态读取宏
#define HC_SR04_ECHO_Read()   GPIO_ReadInputDataBit(HC_SR04_ECHO_PORT, HC_SR04_ECHO_PIN)
/* 作用：
   - 快速读取Echo引脚电平状态
   - 返回值为Bit_SET(高电平)或Bit_RESET(低电平)
*/

/* 函数声明 ----------------------------------------------------------------*/
/**
  * @brief  初始化HC-SR04硬件配置
  * @note   完成以下初始化：
  *         1. 配置Trig引脚为推挽输出
  *         2. 配置Echo引脚为下拉输入
  *         3. 初始化TIM4定时器（用于测量回波时间）
  *         4. 配置相关中断（如果需要）
  */
void HC_SR04_Config(void);

/**
  * @brief  触发一次距离测量
  * @note   操作流程：
  *         1. 发送10us的高电平触发信号
  *         2. 自动恢复低电平
  *         3. 模块内部开始发射超声波
  */
void HC_SR04_Start(void);

/**
  * @brief  获取距离测量值
  * @retval 距离值（单位：厘米）
  * @note   内部实现：
  *         1. 进行5次测量取平均值
  *         2. 通过回波高电平时间计算距离
  *         3. 计算公式：距离 = 高电平时间(us) / 58
  */
float HCSR04_Get_Distance(void);

/* 全局变量声明 ------------------------------------------------------------*/
extern volatile float Distance;  // 测量结果（单位厘米）
/* volatile关键字说明：
   - 保证变量在中断和主程序间可见性
   - 防止编译器优化导致读取旧值
   - 需在主程序源文件中实际定义
*/

#endif /* __HC_SR04_CONFIG_H */
